package com.link.base.base.coupons.service;

import com.link.base.base.accnt.model.AppOrderInfo;
import com.link.base.base.coupons.model.CollectRecord;
import com.link.base.base.coupons.model.Coupons;
import com.link.base.base.coupons.model.Present;
import com.link.base.base.product.model.Product;
import com.link.core.basic.service.BasicService;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * <p>优惠券</p>
 * @author wangdawei
 * @date 2018/6/8
 */

public interface CouponsService extends BasicService<Coupons> {

    /**
     * 按类型查询优惠卷列表（门店商）
     * @author : wangdawei
     * @param entity 礼品对象
     * @return 优惠券列表
     * @throws Exception 异常
     * @date : 2018/5/2
     */
    public List<Coupons> queryCoupListByExamplePage(Coupons entity) throws Exception;

    /**
     * 按类型查询优惠卷列表（渠道商）
     * @author : wangdawei
     * @param entity 礼品对象
     * @return 优惠券列表
     * @throws Exception 异常
     * @date : 2018/5/2
     */
    public List<Coupons> queryCeCoupListByExamplePage(Coupons entity) throws Exception;

    /**
     * 消费者直接领取优惠卷
     * @author : wangdawei
     * @param entity 优惠券对象
     * @param openId 微信openId
     * @param request
     * @return Map
     * @throws Exception 异常
     * @date : 2018/5/2
     */
    public Map<String, Object> getCoupons(Coupons entity, String openId, HttpServletRequest request) throws Exception;

    /**
     * 根据id获取，优惠券品牌，系列，同步微信状态等
     * @author : wangdawei
     * @param entity 优惠券对象
     * @return 优惠券对象
     * @throws Exception 异常
     * @date : 2018/5/2
     */
    public Coupons getCouponsById(Coupons entity) throws Exception;

    /**
     * 编辑优惠卷
     * @author : wangdawei
     * @param couponsList 优惠券列表
     * @throws Exception 异常
     * @date : 2018/5/2
     */
    public void updateCoupons(List<Coupons> couponsList) throws Exception;

    /**
     * 领取优惠券
     * @author : wangdawei
     * @param entity 优惠券对象
     * @param collectRecord 优惠券领取记录对象
     * @throws Exception 异常
     * @date : 2018/5/16
     */
    public void receiceCoupons(Coupons entity, CollectRecord collectRecord) throws Exception;

    /**
     * 使用优惠卷(核销优惠券)
     * @author : wangdawei
     * @param entity 优惠券领取记录对象
     * @return map
     * @throws Exception
     * @date : 2018/5/16
     */
    public Map<String, Object> useCoupons(CollectRecord entity) throws Exception;

    /**
     * App端可用优惠券列表筛选和展示
     * @author : wangdawei
     * @param entity 优惠券领取记录对象
     * @return map
     * @throws Exception
     * @date : 2018/5/16
     */
    public List<Coupons> queryAcctByExamplePage(Coupons entity) throws Exception;

    /**
     * 删除活动下的优惠券，以及品牌系列，优惠券的使用产品信息
     * @author : wangdawei
     * @param entity 优惠券对象
     * @throws Exception
     * @date : 2018/5/16
     */
    public void deleteCoupons(Coupons entity) throws Exception;

    /**
     * pc端查看优惠券信息
     * @author : wangdawei
     * @param entity 优惠券对象
     * @return 领取记录列表
     * @throws Exception
     * @date : 2018/5/16
     */
    public List<CollectRecord> pcGetCoupons(Coupons entity) throws Exception;

    /**
     * 展示优惠券
     * @author : wangdawei
     * @param entity 优惠券对象
     * @return 优惠券列表
     * @throws Exception
     * @date : 2018/5/16
     */
    public List<Coupons> showCoupons(Coupons entity) throws Exception;


    /**
     * 根据客户id查询客户下的奖品列表
     * @author : LiQun
     * @param present 礼品对象
     * @return 产品列表
     * @throws Exception 异常
     * @date : 下午7:13 2018/5/2
     */
    List<Present> queryPresentsByAccountId(Present present) throws Exception;

    /**
     * 根据id更新礼品状态,将其置为已使用
     *
     * @author : LiQun
     * @param present 礼品对象
     * @throws Exception 异常
     * @date : 下午7:15 2018/5/2
     */
    void presentStatusUpdate(Present present) throws Exception;

    /** 会员卡查询
     * @author  lujiang
     * @param coupons
     * @return
     * @throws Exception
     */
    Map<String,Object> queryWxCard(Coupons coupons) throws Exception;


    /**
     * 小程序领取优惠券
     * @author  lujiang
     * @param coupons
     * @param openId
     * @return
     * @throws Exception
     */
    Map<String,Object> getWxCard(List<Coupons> coupons, String openId) throws Exception;

    /**

     */
    /**
     * 根据产品查询优惠券
     * @author  lujiang
     * @param product
     * @return
     * @throws Exception
     */
    Map<String,Object> productForCard(Product product) throws Exception;

    /**
     * 小程序订单查询适用优惠券查询传入订单id,后台查询其余信息
     * @param entity
     * @throws Exception
     */
    void getMPAppOrderInfo(AppOrderInfo entity) throws Exception;

    /**
     * 根据订单信息查询优惠券
     * @author  lujiang
     * @param entity
     * @return
     * @throws Exception
     */
    Map<String,Object> queryOrderCoupons(AppOrderInfo entity) throws Exception;

    /**
     * 扫码核销优惠券
     * @param entity
     * @return
     * @throws Exception
     */
    Coupons scanCodeUseCoup(Coupons entity) throws Exception;

    /**
     * 累加领取的红包的数量
     * @param coupons 优惠券
     * @return 返回更新的条数
     * @throws Exception
     */
    public int updateReceivedNum(Coupons coupons) throws Exception;

    /**
     * h5领取多张优惠券
     * @param couponsList 优惠券列表
     * @return couponsList
     * @throws Exception
     */
    public Map<String,Object> receiveCoupons(List<Coupons> couponsList,String mobilePhone,String openId,Long corpid) throws Exception;

    /**
     * 查询小程序订单可用优惠券
     *
     * @author KuangRuifeng
     * @param entity 订单信息
     * @return 订单可用优惠券
     * @throws Exception 异常
     */
    Map<String,Object> queryMPOrderCoupons(AppOrderInfo entity) throws Exception;

    /**
     * 校验优惠券是否已经被领取
     * @author wangdawei
     * @param couponsList 优惠券
     * @return
     * @throws Exception 异常
     */
    public List<Coupons> checkCoupon(List<Coupons> couponsList,String mobilePhone,Long corpid) throws Exception;

    /**
     * 保存红包活动
     * @author 路江
     * @param coupons
     * @return
     * @throws Exception
     */
    Map<String,Object> createdRedPackActivity(Coupons coupons) throws Exception;

    /**
     * 查询红包活动
     * @author 路江
     * @param coupons
     * @return
     * @throws Exception
     */
    Map<String,Object> queryRedPackActivity(Coupons coupons) throws Exception;
}
